Skip to content

fix(cli): dispatch OS_DATABASE_DRIVER=memory to the mingo InMemoryDriver (#3276)#3285

Merged
os-zhuang merged 2 commits into
mainfrom
fix/cli-memory-driver-dispatch
Jul 19, 2026
Merged

fix(cli): dispatch OS_DATABASE_DRIVER=memory to the mingo InMemoryDriver (#3276)#3285
os-zhuang merged 2 commits into
mainfrom
fix/cli-memory-driver-dispatch

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Problem

Fixes #3276.

os dev / os start / os serve all advertise a memory database driver —
--database-driver … | memory (dev.ts:88-90, start.ts:99-100),
OS_DATABASE_DRIVER=memory, and a memory:// URL scheme in the help text — but
serve.ts's driver dispatch had no memory branch. So selecting it silently
fell through to the dev SQLite :memory: default (resolveSqliteDriver
SQLite-in-memory, a different engine), or, in production, registered no
driver at all
. The mingo InMemoryDriver was only ever reached as the last
resort when both native better-sqlite3 and the wasm fallback failed to load.

Declared ≠ enforced — picking memory gave a different engine than intended.

Fix

  • Extract the driver kind-resolution + construction out of serve.ts's inline
    if/else chain into packages/cli/src/utils/storage-driver.ts, mirroring the
    existing utils/telemetry-datasource.ts / utils/plugin-detection.ts pattern,
    so the whole dispatch is unit-testable in isolation (it previously required a
    full HTTP boot to exercise). Net −75 lines in serve.ts.
  • Add the missing memory branch (aliases mingo, in-memory) that builds the
    mingo InMemoryDriver, honored in dev AND production — an explicit operator
    choice is enforced, not silently swapped.
  • Recognize the advertised memory:// / mingo:// URL scheme in
    inferDriverTypeFromUrl, kept deliberately distinct from sqlite's :memory:
    pseudo-file (which stays SQLite's own in-memory mode).
  • Telemetry-datasource provisioning is preserved exactly — keyed on an explicit
    SQLite primary path (sqliteFilePath), never the memory driver nor the dev-default
    :memory: store, matching pre-extraction behavior.

Tests

storage-driver.test.ts (14 cases) covers the full URL→kind mapping, explicit>URL
precedence, and every construction branch. Proven to go red without the fix
(verified by disabling the branch): memorySqlDriver in dev, null in prod.

  • vitest run — new file 14/14; existing serve/dev tests 29/29
  • tsc -p tsconfig.build.json clean
  • eslint clean

Out of scope (flagged separately)

The same "declared ≠ enforced" gap exists for turso/libsql: URLs infer to
driverType = 'turso' but there is no 'turso' dispatch branch and no
driver-turso package, so it also falls through to SQLite. Left for a follow-up
(either implement a turso driver, or stop advertising it).

🤖 Generated with Claude Code

@vercel

vercel Bot commented Jul 19, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 19, 2026 4:49pm

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling size/l labels Jul 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/cli.

17 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/skills-reference.mdx (via packages/cli)
  • content/docs/api/client-sdk.mdx (via @objectstack/cli)
  • content/docs/api/data-flow.mdx (via @objectstack/cli)
  • content/docs/api/environment-routing.mdx (via @objectstack/cli)
  • content/docs/api/error-catalog.mdx (via @objectstack/cli)
  • content/docs/automation/hook-bodies.mdx (via packages/cli)
  • content/docs/deployment/backup-restore.mdx (via @objectstack/cli)
  • content/docs/deployment/self-hosting.mdx (via @objectstack/cli)
  • content/docs/getting-started/cli.mdx (via @objectstack/cli)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/cli)
  • content/docs/kernel/runtime-services/data-service.mdx (via packages/cli)
  • content/docs/kernel/runtime-services/index.mdx (via packages/cli)
  • content/docs/permissions/authentication.mdx (via @objectstack/cli)
  • content/docs/plugins/packages.mdx (via @objectstack/cli)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/cli)
  • content/docs/protocol/kernel/realtime-protocol.mdx (via @objectstack/cli)
  • content/docs/releases/implementation-status.mdx (via @objectstack/cli)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

os-zhuang and others added 2 commits July 20, 2026 00:08
…ver (#3276)

`os dev` / `os start` / `os serve` all advertise a `memory` database driver
(`--database-driver memory`, `OS_DATABASE_DRIVER=memory`, and a `memory://`
URL scheme), but serve.ts's driver dispatch had no `memory` branch. So
selecting it silently fell through to the dev SQLite `:memory:` default
(SQLite-in-memory — a different engine), or registered no driver at all in
production. Declared ≠ enforced.

Fix + refactor:
- Extract the driver kind-resolution and construction out of serve.ts's
  inline if/else chain into utils/storage-driver.ts, mirroring the existing
  utils/telemetry-datasource.ts / utils/plugin-detection.ts pattern, so the
  whole dispatch is unit-testable in isolation.
- Add the missing `memory` (aliases `mingo`, `in-memory`) branch that builds
  the mingo InMemoryDriver, honored in dev AND production.
- Recognize the advertised `memory://` / `mingo://` URL scheme in
  inferDriverTypeFromUrl (distinct from sqlite's `:memory:` pseudo-file,
  which stays SQLite's own in-memory mode).
- serve.ts telemetry-datasource provisioning behavior is preserved exactly
  (keyed on an explicit-sqlite primary path; never the memory driver).

Tests (storage-driver.test.ts) cover the full URL→kind mapping, explicit>URL
precedence, and every construction branch; the `memory` assertions go red
without the new branch (verified: dev→SqlDriver, prod→null).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@xuyushun441-sys
xuyushun441-sys force-pushed the fix/cli-memory-driver-dispatch branch from e157e0c to d8cfa0b Compare July 19, 2026 16:10
@os-zhuang
os-zhuang merged commit da58467 into main Jul 19, 2026
15 of 16 checks passed
@os-zhuang
os-zhuang deleted the fix/cli-memory-driver-dispatch branch July 19, 2026 16:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/l tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

cli: OS_DATABASE_DRIVER=memory is advertised but serve.ts has no dispatch branch (falls through to SQLite)

1 participant